<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{section},{sectionelse}</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Smarty マニュアル">
<link rel="up" href="language.builtin.functions.html" title="Chapter 7. 組み込み関数">
<link rel="prev" href="language.function.php.html" title="{php}">
<link rel="next" href="language.function.strip.html" title="{strip}">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">{section},{sectionelse}</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="language.function.php.html">Prev</a> </td>
<th width="60%" align="center">Chapter 7. 組み込み関数</th>
<td width="20%" align="right"> <a accesskey="n" href="language.function.strip.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" title="{section},{sectionelse}">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="language.function.section"></a>{section},{sectionelse}</h2></div></div></div>
<p>
  <code class="varname">{section}</code> は、
  <span class="bold"><strong>データが格納された数値添字配列</strong></span> をループするために使用します。
  これは、<a class="link" href="language.function.foreach.html" title="{foreach},{foreachelse}"><code class="varname">{foreach}</code></a>
  が <span class="bold"><strong>１つの連想配列</strong></span>
  をループするのとは異なります。すべての <code class="varname">{section}</code>
  タグは、終了タグ <code class="varname">{/section}</code> とペアになっている必要があります。
   </p>
<div class="informaltable"><table border="1">
<colgroup>
<col align="center">
<col align="center">
<col align="center">
<col align="center">
<col>
</colgroup>
<thead><tr>
<th align="center">属性名</th>
<th align="center">型</th>
<th align="center">必須</th>
<th align="center">デフォルト</th>
<th>概要</th>
</tr></thead>
<tbody>
<tr>
<td align="center">name</td>
<td align="center">string</td>
<td align="center">Yes</td>
<td align="center"><span class="emphasis"><em>n/a</em></span></td>
<td>セクション名</td>
</tr>
<tr>
<td align="center">loop</td>
<td align="center">mixed</td>
<td align="center">Yes</td>
<td align="center"><span class="emphasis"><em>n/a</em></span></td>
<td>ループ回数を決定する値</td>
</tr>
<tr>
<td align="center">start</td>
<td align="center">integer</td>
<td align="center">No</td>
<td align="center"><span class="emphasis"><em>0</em></span></td>
<td>
      ループを開始するインデックス位置。この値が負の場合は、
      配列の最後尾から開始位置が算出されます。
      例えばループ配列に7つの値があり、そしてstartが-2であるならば、
      開始インデックスは5になります。
      ループ配列の長さを超えるような無効な値は、
      自動的に最も近い値に切り捨てられます。</td>
</tr>
<tr>
<td align="center">step</td>
<td align="center">integer</td>
<td align="center">No</td>
<td align="center"><span class="emphasis"><em>1</em></span></td>
<td>
      ループインデックスを進めるために使われるステップ値。
      例えばstep=2なら、インデックスは0, 2, 4をループします。
      stepの値が負の場合は、配列の前方に向かって進みます。
     </td>
</tr>
<tr>
<td align="center">max</td>
<td align="center">integer</td>
<td align="center">No</td>
<td align="center"><span class="emphasis"><em>n/a</em></span></td>
<td>セクションがループする最大の回数</td>
</tr>
<tr>
<td align="center">show</td>
<td align="center">boolean</td>
<td align="center">No</td>
<td align="center"><span class="emphasis"><em><code class="constant">TRUE</code></em></span></td>
<td>このセクションを表示するかどうか</td>
</tr>
</tbody>
</table></div>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>
   必須の属性は <em class="parameter"><code>name</code></em> と <em class="parameter"><code>loop</code></em>
   です。
   </p></li>
<li class="listitem"><p>
    <code class="varname">{section}</code> の <em class="parameter"><code>name</code></em> は、
    英数字とアンダースコアを使って自由に命名できます。これは
    <a class="ulink" href="http://php.net/language.variables" target="_top">PHP の変数</a>
    と同様です。
    </p></li>
<li class="listitem"><p>
    {section} はネスト可能で、その場合の
   <code class="varname">{section}</code> の名前はお互いにユニークである必要があります。
   </p></li>
<li class="listitem"><p>
   <em class="parameter"><code>loop</code></em> 属性で指定されたループ変数
   (たいていは配列) は、<code class="varname">{section}</code>
   のループ回数を決定するために使用されます。
   loop の値として、整数値を渡すこともできます。
   </p></li>
<li class="listitem"><p>
   <code class="varname">{section}</code> 内で値を表示するには、
   変数名に続けてブラケット {} で囲んだセクション名を指定します。
   </p></li>
<li class="listitem"><p>
   ループ変数に値が存在しない場合は
   <code class="varname">{sectionelse}</code> が実行されます。
 	</p></li>
<li class="listitem"><p>
  <code class="varname">{section}</code> には、そのプロパティを操作するための
  自身の変数があります。これらには <a class="link" href="language.variables.smarty.html#language.variables.smarty.loops" title="{$smarty.section}、{$smarty.foreach}">
  <em class="parameter"><code>{$smarty.section.name.property}</code></em></a>
  としてアクセスできます。<span class="quote">“<span class="quote">name</span>”</span> は、<em class="parameter"><code>name</code></em>
  属性の値です。
  </p></li>
<li class="listitem"><p>
  <code class="varname">{section}</code> のプロパティには、
  <a class="link" href="language.function.section.html#section.property.index" title=".index"><em class="parameter"><code>index</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.index.prev" title=".index_prev"><em class="parameter"><code>index_prev</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.index.next" title=".index_next"><em class="parameter"><code>index_next</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.iteration" title=".iteration"><em class="parameter"><code>iteration</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.first" title=".first"><em class="parameter"><code>first</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.last" title=".last"><em class="parameter"><code>last</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.rownum" title=".rownum"><em class="parameter"><code>rownum</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.loop" title=".loop"><em class="parameter"><code>loop</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.show" title=".show"><em class="parameter"><code>show</code></em></a>、
  <a class="link" href="language.function.section.html#section.property.total" title=".total"><em class="parameter"><code>total</code></em></a>
  があります。
  </p></li>
</ul></div>
<div class="example">
<a name="id2780391"></a><p class="title"><b>Example 7.30. {section} でのシンプルな配列のループ</b></p>
<div class="example-contents">
<p>
配列を Smarty に <a class="link" href="api.assign.html" title="assign()"><code class="varname">assign()</code></a> します。
</p>
<pre class="programlisting">

&lt;?php
$data = array(1000,1001,1002);
$smarty-&gt;assign('custid',$data);
?&gt;

</pre>
<p>配列を出力するテンプレート</p>
<pre class="programlisting">

{* この例は $custid 配列のすべての値を表示します *}
{section name=customer loop=$custid}
  id: {$custid[customer]}&lt;br /&gt;
{/section}
&lt;hr /&gt;
{* $custid 配列のすべての値を逆順に表示します *}
{section name=foo loop=$custid step=-1}
  {$custid[foo]}&lt;br /&gt;
{/section}

  </pre>
<p>
   上の例の出力
  </p>
<pre class="screen">

id: 1000&lt;br /&gt;
id: 1001&lt;br /&gt;
id: 1002&lt;br /&gt;
&lt;hr /&gt;
id: 1002&lt;br /&gt;
id: 1001&lt;br /&gt;
id: 1000&lt;br /&gt;

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2780452"></a><p class="title"><b>Example 7.31. {section} で配列を割り当てない例</b></p>
<div class="example-contents">
<pre class="programlisting">

{section name=foo start=10 loop=20 step=2}
  {$smarty.section.foo.index}
{/section}
&lt;hr /&gt;
{section name=bar loop=21 max=6 step=-2}
  {$smarty.section.bar.index}
{/section}

</pre>
<p>
  上の例の出力
</p>
<pre class="screen">
  
10 12 14 16 18
&lt;hr /&gt;
20 18 16 14 12 10

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2780488"></a><p class="title"><b>Example 7.32. {section} の名前</b></p>
<div class="example-contents">
<p><code class="varname">{section}</code> の <em class="parameter"><code>name</code></em>
  は自由につけることができます。<a class="ulink" href="http://php.net/language.variables" target="_top">PHP
  の変数</a> を参照してください。これは、<code class="varname">{section}</code>
  内のデータを参照する際に使用します。</p>
<pre class="programlisting">

{section name=anything loop=$myArray}
  {$myArray[anything].foo}
  {$name[anything]}
  {$address[anything].bar}
{/section}

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2780526"></a><p class="title"><b>Example 7.33. {section} での連想配列のループ</b></p>
<div class="example-contents">
<p>これは、データの連想配列を
   <code class="varname">{section}</code> で出力する例です。
   次に示すのは、配列 <em class="parameter"><code>$contacts</code></em>
   を Smarty に渡す PHP スクリプトです。</p>
<pre class="programlisting">
  
&lt;?php
$data = array(
          array('name' =&gt; 'John Smith', 'home' =&gt; '555-555-5555',
                'cell' =&gt; '666-555-5555', 'email' =&gt; 'john@myexample.com'),
          array('name' =&gt; 'Jack Jones', 'home' =&gt; '777-555-5555',
                'cell' =&gt; '888-555-5555', 'email' =&gt; 'jack@myexample.com'),
          array('name' =&gt; 'Jane Munson', 'home' =&gt; '000-555-5555',
                'cell' =&gt; '123456', 'email' =&gt; 'jane@myexample.com')
        );
$smarty-&gt;assign('contacts',$data);
?&gt;

  </pre>
<p><em class="parameter"><code>$contacts</code></em> を出力するテンプレート</p>
<pre class="programlisting">

{section name=customer loop=$contacts}
&lt;p&gt;
  name: {$contacts[customer].name}&lt;br /&gt;
  home: {$contacts[customer].home}&lt;br /&gt;
  cell: {$contacts[customer].cell}&lt;br /&gt;
  e-mail: {$contacts[customer].email}
&lt;/p&gt;
{/section}

  </pre>
<p>
   上の例の出力
  </p>
<pre class="screen">

&lt;p&gt;
  name: John Smith&lt;br /&gt;
  home: 555-555-5555&lt;br /&gt;
  cell: 666-555-5555&lt;br /&gt;
  e-mail: john@myexample.com
&lt;/p&gt;
&lt;p&gt;
  name: Jack Jones&lt;br /&gt;
  home phone: 777-555-5555&lt;br /&gt;
  cell phone: 888-555-5555&lt;br /&gt;
  e-mail: jack@myexample.com
&lt;/p&gt;
&lt;p&gt;
  name: Jane Munson&lt;br /&gt;
  home phone: 000-555-5555&lt;br /&gt;
  cell phone: 123456&lt;br /&gt;
  e-mail: jane@myexample.com
&lt;/p&gt;

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2780612"></a><p class="title"><b>Example 7.34. {section} での <code class="varname">loop</code> 変数の使用</b></p>
<div class="example-contents">
<p>この例では、<em class="parameter"><code>$custid</code></em>、<em class="parameter"><code>$name</code></em>
  および <em class="parameter"><code>$address</code></em> にはすべて配列が割り当てられ、
  その要素数は同じであるものとします。まず、Smarty に配列を割り当てる
  PHP スクリプトです。</p>
<pre class="programlisting">

&lt;?php

$id = array(1001,1002,1003);
$smarty-&gt;assign('custid',$id);

$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty-&gt;assign('name',$fullnames);

$addr = array('253 Abbey road', '417 Mulberry ln', '5605 apple st');
$smarty-&gt;assign('address',$addr);

?&gt;

</pre>
<p><em class="parameter"><code>loop</code></em> 変数は、ループの回数を決定するためにのみ使用します。
  <code class="varname">{section}</code> 内ではあらゆるテンプレート変数にアクセス可能です。</p>
<pre class="programlisting">

{section name=customer loop=$custid}
&lt;p&gt;
  id: {$custid[customer]}&lt;br /&gt;
  name: {$name[customer]}&lt;br /&gt;
  address: {$address[customer]}
&lt;/p&gt;
{/section}

  </pre>
<p>
   上の例の出力
  </p>
<pre class="screen">

&lt;p&gt;
  id: 1000&lt;br /&gt;
  name: John Smith&lt;br /&gt;
  address: 253 Abbey road
&lt;/p&gt;
&lt;p&gt;
  id: 1001&lt;br /&gt;
  name: Jack Jones&lt;br /&gt;
  address: 417 Mulberry ln
&lt;/p&gt;
&lt;p&gt;
  id: 1002&lt;br /&gt;
  name: Jane Munson&lt;br /&gt;
  address: 5605 apple st
&lt;/p&gt;

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2780718"></a><p class="title"><b>Example 7.35. ネストした {section}</b></p>
<div class="example-contents">
<p>
  {section} は無制限にネスト可能です。{section} をネストすることで、
  多次元配列のような複雑なデータ構造にアクセスすることが可能です。
  これは、配列を割り当てる <code class="filename">.php</code> スクリプトの例です。
  </p>
<pre class="programlisting">

&lt;?php

$id = array(1001,1002,1003);
$smarty-&gt;assign('custid',$id);

$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty-&gt;assign('name',$fullnames);

$addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
$smarty-&gt;assign('address',$addr);

$types = array(
           array( 'home phone', 'cell phone', 'e-mail'),
           array( 'home phone', 'web'),
           array( 'cell phone')
         );
$smarty-&gt;assign('contact_type', $types);

$info = array(
           array('555-555-5555', '666-555-5555', 'john@myexample.com'),
           array( '123-456-4', 'www.example.com'),
           array( '0457878')
        );
$smarty-&gt;assign('contact_info', $info);

?&gt;
  
</pre>
<p>このテンプレートでは、<span class="emphasis"><em>$contact_type[customer]</em></span>
  は現在の顧客の連絡手段を格納した配列となります。</p>
<pre class="programlisting">

{section name=customer loop=$custid}
&lt;hr&gt;
  id: {$custid[customer]}&lt;br /&gt;
  name: {$name[customer]}&lt;br /&gt;
  address: {$address[customer]}&lt;br /&gt;
  {section name=contact loop=$contact_type[customer]}
    {$contact_type[customer][contact]}: {$contact_info[customer][contact]}&lt;br /&gt;
  {/section}
{/section}

  </pre>
<p>
   上の例の出力。
  </p>
<pre class="screen">

&lt;hr&gt;
  id: 1000&lt;br /&gt;
  name: John Smith&lt;br /&gt;
  address: 253 N 45th&lt;br /&gt;
    home phone: 555-555-5555&lt;br /&gt;
    cell phone: 666-555-5555&lt;br /&gt;
    e-mail: john@myexample.com&lt;br /&gt;
&lt;hr&gt;
  id: 1001&lt;br /&gt;
  name: Jack Jones&lt;br /&gt;
  address: 417 Mulberry ln&lt;br /&gt;
    home phone: 123-456-4&lt;br /&gt;
    web: www.example.com&lt;br /&gt;
&lt;hr&gt;
  id: 1002&lt;br /&gt;
  name: Jane Munson&lt;br /&gt;
  address: 5605 apple st&lt;br /&gt;
    cell phone: 0457878&lt;br /&gt;

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2779898"></a><p class="title"><b>Example 7.36. データベースを使用する {sectionelse} の例</b></p>
<div class="example-contents">
<p>データベース (ADODB や PEAR) の検索結果を Smarty に格納します。</p>
<pre class="programlisting">
  
&lt;?php
$sql = 'select id, name, home, cell, email from contacts '
      ."where name like '$foo%' ";
$smarty-&gt;assign('contacts', $db-&gt;getAll($sql));
?&gt;

</pre>
<p>データベースの結果を HTML のテーブルに出力するテンプレート</p>
<pre class="programlisting">

&lt;table&gt;
&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Name&gt;&lt;/th&gt;&lt;th&gt;Home&lt;/th&gt;&lt;th&gt;Cell&lt;/th&gt;&lt;th&gt;Email&lt;/th&gt;&lt;/tr&gt;
{section name=co loop=$contacts}
  &lt;tr&gt;
    &lt;td&gt;&lt;a href="view.php?id={$contacts[co].id}"&gt;view&lt;a&gt;&lt;/td&gt;
    &lt;td&gt;{$contacts[co].name}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].home}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].cell}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].email}&lt;/td&gt;
  &lt;tr&gt;
{sectionelse}
  &lt;tr&gt;&lt;td colspan="5"&gt;No items found&lt;/td&gt;&lt;/tr&gt;
{/section}
&lt;/table&gt;

</pre>
</div>
</div>
<br class="example-break"><div class="sect2" title=".index">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.index"></a>.index</h3></div></div></div>
<p>
   <em class="parameter"><code>index</code></em> は現在のループインデックスを表示します。
   0(又は <em class="parameter"><code>start</code></em> 属性の値)から始まり、
   1(又は <em class="parameter"><code>step</code></em> 属性の値)ずつ増加します。
  </p>
<div class="note" title="テクニカルノート" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">テクニカルノート</h3>
<p>
    <em class="parameter"><code>step</code></em> と <em class="parameter"><code>start</code></em>
    属性が変更されていない場合は、セクションのプロパティ <a class="link" href="language.function.section.html#section.property.iteration" title=".iteration"><em class="parameter"><code>iteration</code></em></a>
    と同じ動作をします。ただ、1 ではなく 0 から始まるという点が異なります。
   </p>
</div>
<div class="example">
<a name="id2781094"></a><p class="title"><b>Example 7.37. {section} の <code class="varname">index</code> プロパティ</b></p>
<div class="example-contents">
<p>
</p>
<div class="note" title="ちなみに……" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">ちなみに……</h3>
<p><code class="literal">$custid[customer.index]</code> と
<code class="literal">$custid[customer]</code> は同じ意味です。</p>
</div>
<p>
</p>
<pre class="programlisting">

{section name=customer loop=$custid}
  {$smarty.section.customer.index} id: {$custid[customer]}&lt;br /&gt;
{/section}

  </pre>
<p>
   上の例の出力
  </p>
<pre class="screen">

0 id: 1000&lt;br /&gt;
1 id: 1001&lt;br /&gt;
2 id: 1002&lt;br /&gt;

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title=".index_prev">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.index.prev"></a>.index_prev</h3></div></div></div>
<p>
   <em class="parameter"><code>index_prev</code></em>
   は前回のループインデックスを表示します。最初のループでは-1がセットされます。
  </p>
</div>
<div class="sect2" title=".index_next">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.index.next"></a>.index_next</h3></div></div></div>
<p>
   <em class="parameter"><code>index_next</code></em>
   は次回のループインデックスを表示します。
   ループの最後でもやはり現在のインデックスの次回の値を返します
   (<em class="parameter"><code>step</code></em> 属性の設定に従います)。
  </p>
<div class="example">
<a name="id2781206"></a><p class="title"><b>Example 7.38. <code class="varname">index</code>、<code class="varname">index_next</code>
 および <code class="varname">index_prev</code> プロパティ</b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php
$data = array(1001,1002,1003,1004,1005);
$smarty-&gt;assign('rows',$data);
?&gt;

</pre>
<p>上の配列をテーブルに出力するテンプレート</p>
<pre class="programlisting">

{* $rows[row.index] と $rows[row] は同じ意味です *}
&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;index&lt;/th&gt;&lt;th&gt;id&lt;/th&gt;
    &lt;th&gt;index_prev&lt;/th&gt;&lt;th&gt;prev_id&lt;/th&gt;
    &lt;th&gt;index_next&lt;/th&gt;&lt;th&gt;next_id&lt;/th&gt;
  &lt;/tr&gt;
{section name=row loop=$rows}
  &lt;tr&gt;
    &lt;td&gt;{$smarty.section.row.index}&lt;/td&gt;&lt;td&gt;{$rows[row]}&lt;/td&gt;
    &lt;td&gt;{$smarty.section.row.index_prev}&lt;/td&gt;&lt;td&gt;{$rows[row.index_prev]}&lt;/td&gt;
    &lt;td&gt;{$smarty.section.row.index_next}&lt;/td&gt;&lt;td&gt;{$rows[row.index_next]}&lt;/td&gt;
  &lt;/tr&gt;
{/section}
&lt;/table&gt;

  </pre>
<p>
 上の例の出力するテーブルは次のようになります。
  </p>
<pre class="screen">

index  id    index_prev prev_id index_next next_id
0      1001  -1	                1          1002
1      1002  0          1001    2          1003
2      1003  1          1002    3          1004
3      1004  2          1003    4          1005
4      1005  3          1004    5

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title=".iteration">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.iteration"></a>.iteration</h3></div></div></div>
<p>
   <em class="parameter"><code>iteration</code></em> は現在のループが反復された回数を表示します。
  </p>
<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
    <a class="link" href="language.function.section.html#section.property.index" title=".index"><em class="parameter"><code>index</code></em></a>
    プロパティとは異なり、これは <code class="varname">{section}</code> のプロパティ
    <em class="parameter"><code>start</code></em>、<em class="parameter"><code>step</code></em> および <em class="parameter"><code>max</code></em>
    の影響を受けません。
    <em class="parameter"><code>iteration</code></em> も 1 から始まります。これは
    <em class="parameter"><code>index</code></em> が 0 から始まるのとは異なります。<a class="link" href="language.function.section.html#section.property.rownum" title=".rownum"><em class="parameter"><code>rownum</code></em></a>
    は <em class="parameter"><code>iteration</code></em> の別名で、全く同じ働きをします。
   </p>
</div>
<div class="example">
<a name="id2781379"></a><p class="title"><b>Example 7.39. セクションのプロパティ <code class="varname">iteration</code></b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php
// 3000 から 3015 までの配列
$id = range(3000,3015);
$smarty-&gt;assign('arr',$id);
?&gt;

</pre>
<p><code class="literal">$arr</code> 配列の要素を
<code class="literal">step=2</code> で出力するテンプレート</p>
<pre class="programlisting">

{section name=cu loop=$arr start=5 step=2}
  iteration={$smarty.section.cu.iteration}
  index={$smarty.section.cu.index}
  id={$custid[cu]}&lt;br /&gt;
{/section}

  </pre>
<p>
   上の例の出力
  </p>
<pre class="screen">

iteration=1 index=5 id=3005&lt;br /&gt;
iteration=2 index=7 id=3007&lt;br /&gt;
iteration=3 index=9 id=3009&lt;br /&gt;
iteration=4 index=11 id=3011&lt;br /&gt;
iteration=5 index=13 id=3013&lt;br /&gt;
iteration=6 index=15 id=3015&lt;br /&gt;

   </pre>
<p>
   もうひとつの例は、<em class="parameter"><code>iteration</code></em> プロパティを使用して
   5 行おきにテーブルのヘッダ部を出力します。
   <a class="link" href="language.function.if.html" title="{if},{elseif},{else}"><code class="varname">{if}</code></a>
   関数を mod 演算子とともに使用します。
  </p>
<pre class="programlisting">

&lt;table&gt;
{section name=co loop=$contacts}
  {if $smarty.section.co.iteration % 5 == 1}
    &lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Name&gt;&lt;/th&gt;&lt;th&gt;Home&lt;/th&gt;&lt;th&gt;Cell&lt;/th&gt;&lt;th&gt;Email&lt;/th&gt;&lt;/tr&gt;
  {/if}
  &lt;tr&gt;
    &lt;td&gt;&lt;a href="view.php?id={$contacts[co].id}"&gt;view&lt;a&gt;&lt;/td&gt;
    &lt;td&gt;{$contacts[co].name}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].home}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].cell}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].email}&lt;/td&gt;
  &lt;tr&gt;
{/section}
&lt;/table&gt;

  </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title=".first">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.first"></a>.first</h3></div></div></div>
<p>
   <em class="parameter"><code>first</code></em> は、現在
   <code class="varname">{section}</code> の一回目の処理を行っている場合に
   <code class="constant">TRUE</code> となります。
  </p>
</div>
<div class="sect2" title=".last">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.last"></a>.last</h3></div></div></div>
<p>
   <em class="parameter"><code>last</code></em> は、現在
   <code class="varname">{section}</code> の最後の処理を行っている場合に
   <code class="constant">TRUE</code> となります。
  </p>
<div class="example">
<a name="id2781546"></a><p class="title"><b>Example 7.40. {section} プロパティ <code class="varname">first</code> と <code class="varname">last</code></b></p>
<div class="example-contents">
<p>
   この例は <code class="varname">$customers</code> 配列をループし、
   ループの最初でヘッダブロック、そしてループの最後でフッタブロックを出力します。
   <a class="link" href="language.function.section.html#section.property.total" title=".total"><em class="parameter"><code>total</code></em></a>
   プロパティも使用します。
   </p>
<pre class="programlisting">

{section name=customer loop=$customers}
  {if $smarty.section.customer.first}
    &lt;table&gt;
    &lt;tr&gt;&lt;th&gt;id&lt;/th&gt;&lt;th&gt;customer&lt;/th&gt;&lt;/tr&gt;
  {/if}

  &lt;tr&gt;
    &lt;td&gt;{$customers[customer].id}}&lt;/td&gt;
    &lt;td&gt;{$customers[customer].name}&lt;/td&gt;
  &lt;/tr&gt;

  {if $smarty.section.customer.last}
    &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;{$smarty.section.customer.total} customers&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  {/if}
{/section}

  </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title=".rownum">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.rownum"></a>.rownum</h3></div></div></div>
<p>
   <em class="parameter"><code>rownum</code></em> は現在のループが反復された回数を表示します(1から開始)。
   これは <a class="link" href="language.function.section.html#section.property.iteration" title=".iteration"><em class="parameter"><code>iteration</code></em></a>
   の別名で、同じ動作をします。
  </p>
</div>
<div class="sect2" title=".loop">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.loop"></a>.loop</h3></div></div></div>
<p>
   <em class="parameter"><code>loop</code></em> は、この
   {section} ループの最後のインデックス番号を表示します。
   <code class="varname">{section}</code> の内部だけでなく、外部で使用することもできます。
     </p>
<div class="example">
<a name="id2781667"></a><p class="title"><b>Example 7.41. {section} プロパティ <code class="varname">loop</code></b></p>
<div class="example-contents">
<pre class="programlisting">

{section name=customer loop=$custid}
  {$smarty.section.customer.index} id: {$custid[customer]}&lt;br /&gt;
{/section}
There are {$smarty.section.customer.loop} customers shown above.

  </pre>
<p>
   上の例の出力
  </p>
<pre class="screen">

0 id: 1000&lt;br /&gt;
1 id: 1001&lt;br /&gt;
2 id: 1002&lt;br /&gt;
There are 3 customers shown above.

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title=".show">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.show"></a>.show</h3></div></div></div>
<p>
   <em class="parameter"><code>show</code></em> は、セクションのパラメータとして使用する
   boolean 値です。<code class="constant">FALSE</code> の場合はこのセクションは表示されません。
   <code class="varname">{sectionelse}</code> があれば、それが代わりに表示されます。
  </p>
<div class="example">
<a name="id2781735"></a><p class="title"><b>Example 7.42. <code class="varname">show</code> プロパティ</b></p>
<div class="example-contents">
<p>Boolean <code class="varname">$show_customer_info</code> を PHP
  アプリケーションから渡し、このセクションを表示するかどうかを調整します。</p>
<pre class="programlisting">

{section name=customer loop=$customers show=$show_customer_info}
  {$smarty.section.customer.rownum} id: {$customers[customer]}&lt;br /&gt;
{/section}

{if $smarty.section.customer.show}
  the section was shown.
{else}
  the section was not shown.
{/if}

  </pre>
<p>
   上の例の出力
  </p>
<pre class="screen">

1 id: 1000&lt;br /&gt;
2 id: 1001&lt;br /&gt;
3 id: 1002&lt;br /&gt;

the section was shown.

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title=".total">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.total"></a>.total</h3></div></div></div>
<p>
   <em class="parameter"><code>total</code></em> は <code class="varname">{section}</code>
   がループしたトータル回数を表示します。これは
   <code class="varname">{section}</code> の内部だけでなく外部でも使うことができます。
  </p>
<div class="example">
<a name="id2781814"></a><p class="title"><b>Example 7.43. <code class="varname">total</code> プロパティの例</b></p>
<div class="example-contents"><pre class="programlisting">

{section name=customer loop=$custid step=2}
  {$smarty.section.customer.index} id: {$custid[customer]}&lt;br /&gt;
{/section}
   There are {$smarty.section.customer.total} customers shown above.

  </pre></div>
</div>
<br class="example-break"><p>
   <a class="link" href="language.function.foreach.html" title="{foreach},{foreachelse}"><code class="varname">{foreach}</code></a>
   および
   <a class="link" href="language.variables.smarty.html#language.variables.smarty.loops" title="{$smarty.section}、{$smarty.foreach}"><em class="parameter"><code>$smarty.section</code></em></a>
   も参照してください。
  </p>
</div>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="language.function.php.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="language.builtin.functions.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="language.function.strip.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">{php} </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> {strip}</td>
</tr>
</table>
</div>
</body>
</html>
